package com.zjc.activiti;

import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test;

import java.util.List;

/**
 * Created by lv_03575 on 2018/4/18.
 */
public class MyTask extends BaseActiviti {
    public MyTask(){
        System.out.println("默认子类构造\r\n");
    }
    /**
     * 部署
     */
    @Test
    public  void  deploy(){
        /**
         * --------流程Id:147501
         --------流程Name:myTask.bpmn
         */
        /**
         * select * from act_re_deployment ORDER BY DEPLOY_TIME_ DESC;
         * select * from  act_re_procdef ORDER BY ID_ DESC;
         * select * from  act_ge_bytearray ORDER BY ID_ DESC;
         */
        baseDeploy("myTask.bpmn");
    }

    @Test
    public  void startProcess(){
        RuntimeService runtimeService=processEngine.getRuntimeService();
        runtimeService.createExecutionQuery();
        ProcessInstance processInstance1=runtimeService.createProcessInstanceQuery().processDefinitionKey("").singleResult();
        String definProcessKey="myTask_process";
        ProcessInstance processInstance=runtimeService.startProcessInstanceByKey(definProcessKey);
        System.out.println("流程实例ID："+processInstance.getId());//流程实例ID --->对应act_ru_execution 的 ID_
        System.out.println("流程定义ID："+processInstance.getProcessDefinitionId());//流程定义ID---->对应act_re_procdef 的ID_
        /**
         *select * from act_ru_execution;

         select * from act_ru_identitylink;（可能会没有数据，没有指定办理人）

         select * from act_ru_task;
         每启动一次 act_ru_execution，act_ru_task 都会增加一条数据
         流程一旦启动了，我们的流程相当于提交成功了
         *
         */
    }

    /**查询当前的个人任务(实际就是查询act_ru_task表)*/
    @Test
    public void findMyPersonalTask(){
        String definKey="myTask_process:1:4";
        //获取事务Service
        TaskService taskService=processEngine.getTaskService();
        List<Task> taskList=taskService.createTaskQuery()//创建任务查询对象
                .processDefinitionId(definKey)//对应act_re_procdef 的ID_
//                .taskId(definKey) //对应act_ru_task 的id
                .list();//获取该办理人下的事务列表

        if(taskList!=null&&taskList.size()>0){
            for(Task task:taskList){
                System.out.println("任务ID："+task.getId());
                System.out.println("任务名称："+task.getName());
                System.out.println("任务的创建时间："+task.getCreateTime());
                System.out.println("任务办理人："+task.getAssignee());
                System.out.println("流程实例ID："+task.getProcessInstanceId());
                System.out.println("执行对象ID："+task.getExecutionId());
                System.out.println("流程定义ID："+task.getProcessDefinitionId());
                System.out.println("#############################################");
            }
        }
    }

    /**完成我的任务*/
    @Test
    public void completeMyPersonalTask(){
        String taskId="10002";//上一次我们查询的任务ID就是304
        TaskService taskService=processEngine.getTaskService();
        taskService.complete(taskId);//完成taskId对应的任务
        System.out.println("完成ID为"+taskId+"的任务");
        /**
         * 完成任务 act_ru_execution ，act_ru_task 会发生变化
         */

    }



}
